package ru.spies.content;

import ru.spies.entities.Agent;
import ru.spies.entities.Document;
import ru.spies.entities.Task;
import ru.spies.forms.EDBFunctional;
import ru.spies.forms.EDBTables;
import ru.spies.forms.LastCookies;
import ru.spies.profileClasses.UserInfo;

public abstract class AbstractContent {
	
	private static String LINK_TO_WORK_WITH_DB_PAGE="workWithDB.jsp";
	private static String COOKIE_FORM_FOR_WORK_FUNCTION="cookieFormForWork";
//	private static String 
	
	protected static final String RETURN_HOME="<input type=\"button\" class=\"inFormBtn\" onclick=\"goHome()\" value=\"Вернуться на главную\">";
	
	protected static final String CONTENT_ERROR="<p>Приносим свои извинения за временные неудобства! :(</p>"+RETURN_HOME;
	protected static final String IMPORTANCE_ERROR="<p>Отсутсвуют типы секретности!</p>"+CONTENT_ERROR;
	protected static final String TASK_TYPE_ERROR="<p>Отсутсвуют типы заданий!</p>"+CONTENT_ERROR;
	protected static final String AGENTS_AND_TASKS_ERROR="<p>У агентов нет заданий</p>";
	protected static final String COUNTRY_ERROR="<p>Мы еще не начали работать в какой-либо стране...</p>"+CONTENT_ERROR;
	protected static final String DEPARTMENT_ERROR="<p>К сожалению, мы не создали по крайней мере 1 отдел. :((</p>"+CONTENT_ERROR;
	protected static final String AGENT_ERROR="<p>А агентов Пушкин нанимать будет?</p><p>Завербуйте минимум 1 агента</p>"+CONTENT_ERROR;
	protected static final String AGENT_ERROR_FOR_RESIDENT="<p>В вашем отделе нет агентов!!!</p><p>Завербуйте минимум 1 агента</p>"+CONTENT_ERROR;
	protected static final String TASK_ERROR="<p>Нужно создать минимум одно задание...</p>"+CONTENT_ERROR;
	protected static final String TASK_ERROR_FOR_RESIDENT="<p>Нужно создать минимум одно задание в вашем отделе...</p>"+CONTENT_ERROR;	
	protected static final String DOCUMENT_ERROR="<p>Отсутсвуют документы!</p>"+CONTENT_ERROR;
	protected static final String DOCUMENT_ERROR_FOR_AGENT="<p>У вас отсутствуют документы!</p>"+CONTENT_ERROR;
	
	protected static final String EMPTY_CONTENT="<p>У вас нет прав для выполнения таких действий!!!</p>"+CONTENT_ERROR;
	
	private static final String USE_NEXT_FIELD="Использовать следующее поле?";
	private static final String GENERATE_PASSWORD="Сгенерировать пароль за вас?";

	protected String createNewLinkWithFunction(String href,String cookieFunction, int cookieValueForFunction, String linkText){
		 /*
		  * StringBuffer htmlLink = new StringBuffer("<p><a href=\""+href+"\" onclick=");
		 htmlLink.append("\""+cookieFunction+"("+cookieValueForFunction+")");
		 htmlLink.append("\">"+linkText+"</a></p>");
		 return htmlLink.toString();
		  */
		 return "<p><a href=\""+href+"\" onclick=\""+cookieFunction+"("+cookieValueForFunction+")\">"+linkText+"</a></p>";
	}
	
	public String formForWorkContent(String tables[]){
		String htmlContent = new String();
		int j=0;
		for (EDBTables i: EDBTables.values()){
			if (UserInfo.getInstance().getPrivileges().getPrivilageStatus(i, LastCookies.getInstance().getLastSystemCookie())){
				htmlContent+=createNewLinkWithFunction(LINK_TO_WORK_WITH_DB_PAGE, COOKIE_FORM_FOR_WORK_FUNCTION,i.ordinal(), tables[j]);
			}				
			j++;
		}
		if (htmlContent.isEmpty()) return EMPTY_CONTENT;
		return htmlContent;
	}
	
	public String formDBFunctionalContent(String tables[]){
		String htmlContent = new String();
		int j=0;
		for (EDBFunctional i: EDBFunctional.values()){
			if (UserInfo.getInstance().getPrivileges().getAdditionalPrivilegeStatus(i)){
				htmlContent+=createNewLinkWithFunction(LINK_TO_WORK_WITH_DB_PAGE, COOKIE_FORM_FOR_WORK_FUNCTION,i.ordinal(), tables[j]);
			}				
			j++;
		}
		if (htmlContent.isEmpty()) return EMPTY_CONTENT;
		return htmlContent;
	}
	
	protected String getComboOption(String paramName, String value){
		return "<option value=\""+value+"\">"+paramName+"</option>";
	}
	
	public String jsFileForDataTableContent(String tableName, String source, String cols[]){
		/*
		 * StringBuffer jsFunc = new StringBuffer();
		jsFunc.append("$(document).ready(function() {");
		jsFunc.append("var oTable = $('#"+tableName+"').dataTable( {");	
		jsFunc.append("\"bProcessing\": true,");		
		jsFunc.append("\"sAjaxSource\": \""+source+".txt\",");		
		jsFunc.append("\"aoColumns\": [");
		for (int i=0;i<cols.length;i++){
			jsFunc.append("{ \"mDataProp\": \""+cols[i]+"\" },"); 
		}	   		
        jsFunc.append("]");	
        jsFunc.append("} );");
		jsFunc.append("} );");
		return jsFunc.toString();
		 */
		//String jsFunc="$(document).ready(function() {var oTable = $('#"+tableName+"').dataTable( {\"bProcessing\": true,\"sAjaxSource\": \""+source+".txt\",\"language\": {\"sProcessing\": \"Подождите...\",\"sLengthMenu\": \"Показать _MENU_ записей\",\"sZeroRecords\": \"Записи отсутствуют.\",\"sInfo\": \"Записи с _START_ до _END_ из _TOTAL_ записей\",\"sInfoEmpty\": \"Записи с 0 до 0 из 0 записей\",\"sInfoFiltered\": \"(отфильтровано из _MAX_ записей)\",\"sInfoPostFix\": \"\",\"sSearch\": \"Поиск:\",\"sUrl\": \"\",\"oPaginate\": {\"sFirst\": \"Первая\",\"sPrevious\": \"Предыдущая\",\"sNext\": \"Следующая\",\"sLast\": \"Последняя\"},\"oAria\": { \"sSortAscending\": \": активировать для сортировки столбца по возрастанию\",\"sSortDescending\": \": активировать для сортировки столбцов по убыванию\"}}\"aoColumns\": [";
		String jsFunc="$(document).ready(function() {var oTable = $('#"+tableName+"').dataTable( {\"bProcessing\": true,\"sAjaxSource\": \""+source+".txt\",\"language\": {\"sProcessing\": \"Подождите...\",\"sLengthMenu\": \"Показать _MENU_ записей\",\"sZeroRecords\": \"Записи отсутствуют.\",\"sInfo\": \"Записи с _START_ до _END_ из _TOTAL_ записей\",\"sInfoEmpty\": \"Записи с 0 до 0 из 0 записей\",\"sInfoFiltered\": \"(отфильтровано из _MAX_ записей)\",\"sInfoPostFix\": \"\",\"sSearch\": \"Поиск:\",\"sUrl\": \"\",\"oPaginate\": {\"sFirst\": \"Первая\",\"sPrevious\": \"Предыдущая\",\"sNext\": \"Следующая\",\"sLast\": \"Последняя\"},\"oAria\": { \"sSortAscending\": \": активировать для сортировки столбца по возрастанию\",\"sSortDescending\": \": активировать для сортировки столбцов по убыванию\"}},\"aoColumns\": [";
		for (int i=0;i<cols.length;i++){
			jsFunc+="{ \"mDataProp\": \""+cols[i]+"\" },"; 
		}	   		
		jsFunc+="]} );} );";
		return jsFunc;
	}
	
	public String getDataTableContent(String tableName,String cols[]){
		/*
		 * StringBuffer htmlContent = new StringBuffer();
		htmlContent.append("<div id=\"dynamic\">");
		htmlContent.append("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"display\" id=\""+tableName+"\">");
		htmlContent.append("<thead>");
		htmlContent.append(getColumnsForDataTable(cols));
	    htmlContent.append("</thead>");
	    htmlContent.append("<tbody>");	        
	    htmlContent.append("</tbody>");
	    htmlContent.append("<tfoot>");
	    htmlContent.append(getColumnsForDataTable(cols));
	    htmlContent.append("</tfoot>");
	    htmlContent.append("</table>");
	    htmlContent.append("</div>");
		return htmlContent.toString();
		 */
		return "<div id=\"dynamic\"><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"display\" id=\""+tableName+"\"><thead>"+getColumnsForDataTable(cols)+"</thead><tbody></tbody><tfoot>"+getColumnsForDataTable(cols)+"</tfoot></table></div>";
	}
	
	private String getColumnsForDataTable(String cols[]){
		StringBuffer htmlContent = new StringBuffer();
		htmlContent.append("<tr>");
		int width=(int)(100/cols.length);
		int eps=100-(width*cols.length);
		for (int i=0;i<cols.length-1;i++){
			htmlContent.append("<th width=\""+width+"%\">"+cols[i]+"</th>");
		}
		htmlContent.append("<th width=\""+(width+eps)+"%\">"+cols[cols.length-1]+"</th>");
		htmlContent.append("</tr>");
		return htmlContent.toString();
	}
	
	public String acceptContent(){
		StringBuffer htmlContent = new StringBuffer("<p>Вы действительно хотите получить эту информацию?</p>");
		htmlContent.append("<p>Возможно, необходимо будет подождать окончания обработки данных</p>");
		htmlContent.append("<input type=\"submit\" class=\"inFormBtn\" value=\"Да\" />");
		htmlContent.append("<input type=\"button\" class=\"inFormBtn\" value=\"Нет\" onclick=\"goSystem()\" />");
		return htmlContent.toString();
	}
	
	protected String createCheckBox(String name){
		return createCheckBoxWithText(name,USE_NEXT_FIELD );
	}
	
	private String createCheckBoxWithText(String name, String text){
		return "<p><input type=\"checkbox\" name=\""+name+"\" value=\"ok\"/>"+text+"</p>";
	}
	
	protected String askForPasswordGeneretor(){
		return createCheckBoxWithText("withPasswordGenerator", GENERATE_PASSWORD);
	}
	
	protected boolean checkAgentForMineDepartment(Agent agent){
		if (!UserInfo.getInstance().getPrivileges().canDoNormalShow()){
			if (UserInfo.getInstance().getMe().getAgent().getDepartment().getId().intValue()==agent.getDepartment().getId().intValue()){
				return true;
			}
			return false;
		} else {
			return true;
		}
	}
	
	protected boolean checkTaskForMineCountry(Task task){
		if (!UserInfo.getInstance().getPrivileges().canDoNormalShow()){
			if (UserInfo.getInstance().getMe().getAgent().getDepartment().getCountry().getId().intValue()==task.getCountry().getId().intValue()){
				return true;
			}
			return false;
		} else {
			return true;
		}
	}
	
	protected boolean isThisDocumentMineOrFromMineDepartment(Document doc){
		UserInfo currentInfo=UserInfo.getInstance();
		if (!currentInfo.getPrivileges().canDoNormalShow()){
			if (currentInfo.getMe().getAgent().getId().intValue()==doc.getAgent().getId().intValue()){
				return true;
			}
			if (currentInfo.isRoleResident()){
				if (doc.getAgent().getDepartment().getId().intValue()==currentInfo.getMe().getAgent().getDepartment().getId().intValue()){
					return true;
				}
			}
			return false;
		} else {
			return true;
		}
	}
	
}
